home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 January / CHIP Turkiye Ocak 1998.iso / ARACLAR / LOTUSORG / ACROREAD / INSTALL.DSK / LANGUAGE.LSS < prev    next >
Text File  |  1996-04-24  |  30KB  |  764 lines

  1.  
  2. ''/*********************************************************************
  3. ''
  4. ''   Module Name:   language.lss
  5. ''
  6. ''   Module Code:   TOOLKIT
  7. ''
  8. ''   Author:              JMDonohue
  9. ''   Creation Date:  May 15, 1995
  10. ''
  11. ''   Copyright Lotus Development Corporation, (c) 1995
  12. ''
  13. ''
  14. ''  
  15. ''   Description: 
  16. ''     Lotus script file for language processing in common install
  17. ''   
  18. ''   
  19. ''   Additional authors:
  20. ''
  21. ''   Change History:
  22. ''   $Log:   //CIT/VOL1/CFLOG/logfiles/cominst/toolkit/language.l@s  $
  23. '' 
  24. ''    Rev 1.42   24 Apr 1996 15:33:14   jdonohue
  25. '' Added phony "PB" language acronym, "Pseudo" directory for pseudo-language install
  26. '' 
  27. ''    Rev 1.41   17 Apr 1996 15:46:10   jdonohue
  28. '' Clean up comments
  29. '' 
  30. ''    Rev 1.40   01 Apr 1996 09:04:52   jdonohue
  31. '' Added functions  MarkLanguageSubdir and Lot_FixupLanguageDirectories to support
  32. '' new method of MLC handling wih revised C function FRefreshLanguageSource
  33. '' 
  34. ''    Rev 1.39   01 Mar 1996 09:25:32   jdonohue
  35. '' Don't use version major/minor and call C function AddLanguageToRegistry in
  36. '' AddRegistryLanguage.  This should eliminate delimiter problem in German, etc
  37. '' 
  38. ''    Rev 1.38   01 Feb 1996 15:23:44   cmoy
  39. '' HISHI: Merged FE changes
  40. '' 
  41. ''    Rev 1.37   11 Dec 1995 13:59:32   jdonohue
  42. '' Obsoleted functions RefreshLanguageSourceDirectories and
  43. '' MarkSourceLanguageSubdir
  44. '' 
  45. ''    Rev 1.36   27 Oct 1995 15:10:56   jdonohue
  46. '' Popup Language Install Message only for first product (suite or single prod)
  47. '' 
  48. ''    Rev 1.35   Oct 24 1995 16:56:32   cmoy
  49. '' removed eof char
  50. '' 
  51. ''    Rev 1.34   16 Oct 1995 10:54:30   jdonohue
  52. '' Removed high-bit (non ASCII) characters
  53. '' 
  54. ''    Rev 1.33   26 Sep 1995 16:35:46   jdonohue
  55. '' Removed extraneous line
  56. '' 
  57. ''    Rev 1.32   26 Sep 1995 16:14:56   jdonohue
  58. '' Replace C function FindRegistryLanguage with script function
  59. '' Local function IsLanguageInstalled has product name, version arguments
  60. '' PopupLanguageInstallMessage has product name as argument, not language acrony
  61. '' Added sub InitLanguages that records install kind for global and products
  62. '' Obsolete symbol SYM_INSTALLED_LANGUAGES$
  63. '' 
  64. ''    Rev 1.31   21 Sep 1995 15:11:08   jdonohue
  65. '' 
  66. '' Changed 0 to FALSE
  67. '' 
  68. ''    Rev 1.30   13 Sep 1995 08:01:46   jdonohue
  69. '' Removed error case from AddRegistryLanguage
  70. '' 
  71. ''    Rev 1.29   12 Sep 1995 11:55:32   jdonohue
  72. '' Added PopupLanguageInstallMessage for language install message
  73. '' 
  74. ''    Rev 1.28   11 Sep 1995 17:00:04   jdonohue
  75. '' No language install for distribution case
  76. '' 
  77. ''    Rev 1.27   24 Aug 1995 16:21:50   jdonohue
  78. '' Use string literal for language name in language install message
  79. '' 
  80. ''    Rev 1.26   21 Aug 1995 15:41:30   amontalv
  81. '' Put name of registry keys into globals.lss
  82. '' 
  83. ''    Rev 1.25   17 Aug 1995 15:02:54   jdonohue
  84. '' Added functions to handle node install of server secondary language
  85. '' 
  86. ''    Rev 1.24   15 Aug 1995 10:33:26   jdonohue
  87. '' Create registry language keys for language install if necessary
  88. '' 
  89. ''    Rev 1.23   14 Aug 1995 13:55:34   jdonohue
  90. '' Don't set language install for server install from registry values
  91. '' 
  92. ''    Rev 1.22   11 Aug 1995 12:58:50   jdonohue
  93. '' Language install if not primary language
  94. '' Added function IsLanguageInstalled
  95. '' 
  96. ''    Rev 1.21   10 Aug 1995 10:54:58   jdonohue
  97. '' Changed language install message box handling
  98. '' 
  99. ''    Rev 1.20   10 Aug 1995 07:50:52   jdonohue
  100. '' Switched arguments for language install message
  101. '' 
  102. ''    Rev 1.19   04 Aug 1995 15:17:48   jdonohue
  103. '' Made Lot_SetLanguageDirectory PUBLIC
  104. '' 
  105. ''    Rev 1.18   04 Aug 1995 11:57:08   jdonohue
  106. '' Fixed bug rewriting registry languages on reinstall
  107. '' 
  108. ''    Rev 1.17   25 Jul 1995 13:38:46   jdonohue
  109. '' Allow user to exit language install
  110. '' 
  111. ''    Rev 1.16   21 Jul 1995 08:13:38   jdonohue
  112. '' Added language acronyms from ccstr header
  113. '' 
  114. ''    Rev 1.15   20 Jul 1995 15:00:14   jdonohue
  115. '' Only pop up message box for language install
  116. '' 
  117. ''    Rev 1.14   18 Jul 1995 12:39:02   jdonohue
  118. '' Use standard Lotus Install title for language/reinstall message box
  119. '' 
  120. ''    Rev 1.13   12 Jul 1995 16:58:12   jdonohue
  121. '' Made Lot_SetLanguageDirectory more robust
  122. '' 
  123. ''    Rev 1.12   21 Jun 1995 14:02:00   jdonohue
  124. '' Creates installed and default language keys/values if necessary
  125. '' 
  126. ''    Rev 1.11   09 Jun 1995 16:45:58   jdonohue
  127. '' Lot_SetLanguageDirectory returns blank if language acronym blank
  128. '' 
  129. ''    Rev 1.10   05 Jun 1995 16:37:28   amontalv
  130. '' Made changes for migrating to LotusScript version 3.0.37.
  131. '' 
  132. ''    Rev 1.9   26 May 1995 15:33:22   jdonohue
  133. '' Exits initlanguage of product name or version not supplied
  134. '' 
  135. ''    Rev 1.8   24 May 1995 12:26:56   jdonohue
  136. '' Fixed chapter finding logic
  137. '' 
  138. ''    Rev 1.7   22 May 1995 11:03:50   jdonohue
  139. '' Made IsInstallLanguageSection local function
  140. '' 
  141. ''    Rev 1.6   19 May 1995 15:16:00   jdonohue
  142. '' Added product number argument to SetLanguageSectionsOn
  143. '' 
  144. ''    Rev 1.5   19 May 1995 14:56:26   jdonohue
  145. '' Added functions to turn language sections on, and to retrieve language subdir
  146. '' 
  147. ''    Rev 1.4   18 May 1995 15:37:06   jdonohue
  148. '' Added function to update registry installed languages
  149. '' 
  150. ''    Rev 1.3   18 May 1995 13:32:54   jdonohue
  151. '' Added function to generate language subdirectory
  152. '' 
  153. ''    Rev 1.2   18 May 1995 10:51:38   jdonohue
  154. '' Changed InitLanguage to be called by clients in XXX.LSS, e.g.
  155. '' 
  156. ''    Rev 1.1   17 May 1995 08:27:48   jdonohue
  157. '' Changed upgrade logic -- no message
  158. '' 
  159. ''    Rev 1.0   16 May 1995 17:12:46   jdonohue
  160. '' Initial Revision
  161. '' 
  162. ''----------------------------------------------------------------------
  163. ''   Date     Vers. Pgmr  SPR#  Change
  164. ''----------------------------------------------------------------------
  165. '' 05-15-95   0001  JMD         Initial
  166. ''
  167. ''----------------------------------------------------------------------
  168. ''
  169. ''*********************************************************************/
  170.  
  171. '**************************************************************************
  172. '*******************************  Windows API's  **************************
  173. '**************************************************************************
  174.  
  175. USE "RESOURCE"
  176. USE "GLOBALS"
  177. USE "SHARE"
  178. OPTION DECLARE
  179.  
  180. CONST LANGKEYWORD$="LANG"                
  181. DIM LanguagesInit AS INTEGER
  182. DIM LanguageDirectorySymbolList LIST AS STRING
  183. PUBLIC SrcDirResetFlag AS INTEGER    'Lets us know we've reset SYM_STF_BASEDIR
  184.                                             'for a node install in a secondary server
  185.                                             'language (!)
  186.  
  187. '**************************C CALLOUT PROTOTYPES*************************
  188.  
  189. 'OBSOLETE: !!SYM_INSTALLED_LANGUAGES$ symbol not used JMD@
  190. 'OBSOLETE: !! Should delete from bldcui C function JMD@
  191. 'DECLARE PUBLIC FUNCTION FindRegistryLanguages LIB "msshlstf.dll" _
  192. '         ALIAS "_FindRegistryLanguages@20" (ByVal szAppName$, ByVal VerMajor%, _
  193. '         ByVal VerMinor%, ByVal szInstalled$, ByVal nInstalled&) AS INTEGER
  194. DECLARE PUBLIC FUNCTION AddLanguageToRegistry LIB "msshlstf.dll" _
  195.          ALIAS "_AddLanguageToRegistry@16" (ByVal szAppName$, ByVal VerMajor%, _
  196.          ByVal VerMinor%, ByVal szLangKW$ ) AS LONG
  197. DECLARE PUBLIC FUNCTION FRefreshLanguageSource LIB "lcomstf.dll" _
  198.          ALIAS "_FRefreshLanguageSource@12" (ByVal szSymbol$, ByVal szLangKW$, ByVal Flag% ) AS INTEGER
  199.  
  200. DECLARE PUBLIC SUB InitLanguages(szProductName$, szProductVersion$, prodno%) 
  201. DECLARE PUBLIC SUB InitLanguage(szProductName$, szProductVersion$, _
  202.                         szInstallKind$, szLanguageSubdir$) 
  203. DECLARE PUBLIC SUB SetLanguageSubdir( szTarget$, szSource$ ) 
  204. DECLARE PUBLIC SUB AddRegistryLanguage(szProductName$, szProductVersion$) 
  205. DECLARE PUBLIC SUB Lot_SetLanguageSectionsOn (ProdNo%) 
  206. DECLARE PUBLIC FUNCTION Lot_SetLanguageDirectory(szLanguageAcronym$) AS STRING
  207. DECLARE PUBLIC SUB MarkLanguageSubdir(szSubdirSymbol$)
  208. DECLARE PUBLIC SUB Lot_FixupLanguageDirectories
  209. DECLARE PUBLIC FUNCTION IsServerSecondaryLanguage AS INTEGER
  210. DECLARE PUBLIC SUB PopupLanguageInstallMessage( lang$)
  211.  
  212. '** Private functions
  213. DECLARE FUNCTION IsInstallLanguageSection( szSectionKeyword$) AS INTEGER 
  214. DECLARE FUNCTION IsLanguageInstalled(szProductName$, szProductVersion$) AS INTEGER
  215. DECLARE FUNCTION FindRegistryLanguages(szProductName$, szProductVersion$) AS STRING
  216.  
  217. PUBLIC SUB InitLanguages(szProductName$, szProductVersion$, prodno%) 
  218. '*************************************************************************
  219. '** Purpose: Finds out the installed languages and determines the nature
  220. '**  of the install.  If not running automated, displays a message box for
  221. '**  language install; for an upgrade or a reinstall, just continues
  222. '**  Sets symbols for install kind for install and for individual products in 
  223. '**  Suite
  224. '**  
  225. '** Author: JMDonohue
  226. '** Arguments: 
  227. '**   szProductName$    Product name for registry, e.g., "Approach"
  228. '**   szProductVersion$ Product version for registry, e.g., "2.1"
  229. '**   prodno%                 Product number from toolkit
  230. '**   
  231. '**  Obtains values for the following global symbols:
  232. '**   SYM_INSTALL_LANGUAGE$
  233. '**  Sets values for the following global symbols:
  234. '**   SYM_INSTALL_KIND$
  235. '**   SYM_INSTALL_KINDS$ (list)
  236. '**   
  237. '*************************************************************************
  238.     DIM szInstallKind$, szDummy$ 
  239.    DIM network$
  240.     network$ =  GetSymbolValue(SYM_NETWORK$) 
  241.     InitLanguage szProductName$, szProductVersion$, szInstallKind$, szDummy$  
  242.     '' No language install for server or distribution
  243.     IF network$ <> gSTANDARD AND network$ <> gNODE THEN 
  244.         szInstallKind$ = "SERVER"
  245.     END IF
  246.     ' Set the overall install kind based on first product (suite case)
  247.     IF prodno% = 1 THEN SetSymbolValue SYM_INSTALLKIND$, szInstallKind$
  248.     ' Set the product install kinds for client use in scripts
  249.     SetListItem SYM_INSTALLKINDS$, prodno%, szInstallKind$
  250. '** Inform the user what's happening (only for product 1 (suite or single))
  251.     IF prodno% <> 1 THEN EXIT SUB
  252.    IF szInstallKind$ =  gLANGUAGEINSTALL$ THEN _
  253.         PopupLanguageInstallMessage( szProductName$ )
  254. END SUB
  255.  
  256.  
  257. PUBLIC SUB InitLanguage(szProductName$, szProductVersion$, _
  258.                         szInstallKind$, szLanguageSubdir$) 
  259. '*************************************************************************
  260. '** Purpose: Finds out the installed languages and determines the nature
  261. '**  of the install.  If not running automated, displays a message box for
  262. '**  language install; for an upgrade or a reinstall, just continues
  263. '**  
  264. '** Author: JMDonohue
  265. '** Arguments: 
  266. '**   szProductName$    Product name for registry, e.g., "Approach"
  267. '**   szProductVersion$ Product version for registry, e.g., "2.1"
  268. '**   Returns:
  269. '**   szInstallKind$    One of:  gUPGRADE
  270. '**                              gREINSTALL
  271. '**                              gLANGUAGEINSTALL
  272. '**   szLanguageSubdir$ Subdirectory name for other than primary language 
  273. '**                     files, e.g., "Francais"
  274. '**   
  275. '**  Obtains values for the following global symbols from resources:
  276. '**   SYM_INSTALL_LANGUAGE$
  277. '**   
  278. '**  Sets the following global symbols:
  279. '**   SYM_LANGUAGE_SUBDIR$     
  280. '*************************************************************************
  281.    DIM  i%, dbl#, s$, lang$, network$
  282.    DIM szInstalled$, nInstalled& 
  283.    nInstalled = 128        'Size of installed languages string
  284.     
  285.     szInstallKind$ = gUPGRADE$        'Default
  286. '** Set language of install and its subdirectory (once only)
  287.    if LanguagesInit  = 0 Then
  288.       s$ = LdString(SID_LANGUAGE)
  289.       SetSymbolValue SYM_INSTALL_LANGUAGE$, s$
  290.       s$ = Lot_SetLanguageDirectory(s$) 
  291.       SetSymbolValue SYM_LANGUAGE_SUBDIR$, s$
  292.       LanguagesInit  = 1
  293.    End if
  294.  
  295.    IF szProductName$ = "" THEN EXIT SUB
  296.    IF szProductVersion$ = "" THEN EXIT SUB
  297.     network$ =  GetSymbolValue(SYM_NETWORK$) 
  298.     ' MLC Does not apply to distribution, and server determines it from
  299.     ' cinstall.ini
  300.     IF network$ = gSERVER$ THEN EXIT SUB
  301.     IF network$ = gDISTRIBUTION$ THEN EXIT SUB
  302.    szInstalled$ = STRING$(nInstalled&, 0) 
  303. '** Find the list of installed languages for product/version
  304.    szInstalled$ = FindRegistryLanguages(szProductName$, szProductVersion$)
  305.    szInstalled$ = NullTrim(szInstalled$)
  306.    if szInstalled$ = "" Then
  307. '** Product/version not installed == Upgrade
  308.       SetSymbolValue SYM_INSTALLKIND$, gUPGRADE$
  309.       szInstallKind$ = gUPGRADE$
  310.       szLanguageSubdir$ = ""  '** Goes in with content
  311.       EXIT Sub
  312.    end if
  313. '** Find out if our language is primmary
  314.    lang$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  315.    s$ = Lot_GetNthFieldFromIniString(szInstalled$, 1, "") 
  316.     s$ = LEFT(s$, 2)    ' Paranoia
  317.    if s$ = lang$ then
  318.    '** Found the primary language and the version, must be reinstall
  319.       szInstallKind$ =  gREINSTALL$
  320.       szLanguageSubdir$ = ""     '** Goes in with content
  321.       EXIT Sub
  322.    end if
  323. '** Got this far, we must be language install, set the directory and kind
  324.    szLanguageSubdir$ = GetSymbolValue (SYM_LANGUAGE_SUBDIR$)
  325.    szInstallKind$ =  gLANGUAGEINSTALL$
  326.    
  327. END SUB
  328.  
  329. '**************************************************************************
  330. '** SUB PopupLanguageInstallMessage( szProductName$)
  331. '** Purpose: Displays a dialog telling the user a language install is
  332. '** occurring and requesting confirmation; if answered no, exits install
  333. '**  
  334. '** Author: JMDonohue
  335. '** Arguments: szProductName$    Product Name
  336. '**   
  337. '*************************************************************************
  338. PUBLIC SUB PopupLanguageInstallMessage( szProductName$)
  339.     DIM msg$, i%, s$, title$, rc&
  340.     
  341. '** Set the standard title for install messages
  342.    title$ = LdString(SID_TKT_STD_TITLE)
  343.     msg$  = LdString(SID_LANGUAGEINSTALL_MSG)
  344.    i% = instr(msg$,"%s")
  345.    s$ = mid$(msg$, 1, i%-1) + szProductName$ + mid$(msg$, i%+2)
  346.    if GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN EXIT SUB
  347.     DO
  348.       rc& = DoMsgBox(s$, title$, MB_YESNO)
  349.         if CINT(rc&) = IDYES  THEN 
  350.             EXIT SUB
  351.         ELSE
  352.             QUIT
  353.         END IF
  354.     LOOP 
  355. END SUB
  356.  
  357. '**************************************************************************
  358. '** FUNCTION IsInstallLanguageSection( szSectionKeyword$) AS INTEGER
  359. '** Purpose: Determines if section is part of a language pack for the language
  360. '** currently being installed by matching the ending of the name with the
  361. '** keyword "LANG??" where "??" is a two character acronym for the language
  362. '**  
  363. '** Author: JMDonohue
  364. '** Arguments: szSectionKeyword$    keyword for section from .inf file
  365. '** Returns:   TRUE if a section for the language we are installing
  366. '**  Uses the following global symbols: 
  367. '**   SYM_INSTALL_LANGUAGE$
  368. '**   
  369. '*************************************************************************
  370. FUNCTION IsInstallLanguageSection( szSectionKeyword$) AS INTEGER
  371.    DIM LangKey$, LangAcronym$, InstallLanguage$, s$, leng%
  372.    s$ = szSectionKeyword$
  373.    leng% = Len(s$)
  374.    if leng% < 6 Then
  375.       IsInstallLanguageSection = FALSE
  376.    Else
  377.    LangKey$ = UCase$(Right$(s$,6))
  378.    LangAcronym$ = Right$(LangKey$,2)
  379.    InstallLanguage$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  380.  
  381.    LangKey$ = Left$(LangKey$,4)
  382.    If LangKey$ = LANGKEYWORD$ Then
  383.       If LangAcronym$ = InstallLanguage$ Then
  384.          IsInstallLanguageSection = TRUE
  385.       Else
  386.          IsInstallLanguageSection = FALSE
  387.       End if
  388.    Else
  389.       IsInstallLanguageSection = FALSE
  390.    End if
  391.    End if
  392. END FUNCTION
  393.  
  394.  
  395. FUNCTION IsLanguageInstalled(szProductName$, szProductVersion$) AS INTEGER
  396. '**************************************************************************
  397. '** Purpose: Determines if the current language is already installed by 
  398. '** examining the registry entries for product/version
  399. '**  
  400. '** Author: JMDonohue
  401. '** Arguments: 
  402. '**   szProductName$    Product name for registry, e.g., "Approach"
  403. '**   szProductVersion$ Product version for registry, e.g., "2.1"
  404. '** 
  405. '** Returns:   Index of language, or 0 if not installed
  406. '**  Uses the following global symbols: 
  407. '**   SYM_INSTALL_LANGUAGE$
  408. '**   
  409. '*************************************************************************
  410.    DIM lang$, installed$, s$, i%
  411.  
  412.     IsLanguageInstalled = 0
  413.     i% = 1
  414.     lang$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  415.    installed$ = FindRegistryLanguages(szProductName$, szProductVersion$)
  416.     if installed$ = "" THEN EXIT FUNCTION
  417.     DO
  418.         s$ = Lot_GetNthFieldFromIniString(installed$ , i%, "") 
  419.         s$ = LEFT(s$, 2)        ' Paranoia
  420.         if s$ = lang$ then
  421.             IsLanguageInstalled = i%
  422.             EXIT FUNCTION
  423.         end if
  424.         i% = i% + 1
  425.     LOOP WHILE (s$<>"")
  426. END FUNCTION
  427.  
  428.  
  429. '**************************************************************************
  430. '** SUB SetLanguageSubdir( szTarget$, szSource$ ) 
  431. '** Purpose: For a language install, sets the value of target symbol to the
  432. '**   value of source symbol with the language subdirectory appended
  433. '**  
  434. '** Author: JMDonohue
  435. '** Arguments: szTarget$   Target symbol for language subdirectory
  436. '**            szSource$   Symbol for base component directory
  437. '** Returns:   
  438. '**  Uses the following global symbols: 
  439. '**   SYM_LANGUAGE_SUBDIR$
  440. '**   
  441. '*************************************************************************
  442. PUBLIC SUB SetLanguageSubdir( szTarget$, szSource$ ) 
  443.     DIM s$
  444.     s$ = GetSymbolValue(SYM_LANGUAGE_SUBDIR$) + "\"
  445.     s$ = MakePath(GetSymbolValue(szSource$), s$) 
  446.    SetSymbolValue szTarget$, s$ 
  447. END SUB
  448.  
  449.  
  450. '*************************************************************************
  451. '** SUB AddRegistryLanguage(szProductName$, szProductVersion$)
  452. '** Purpose: When a language install completes, updates the list of 
  453. '** installed languages for the product/version; for a first time install,
  454. '** create the appropriate key and value
  455. '**  
  456. '** Author: JMDonohue
  457. '** Arguments: 
  458. '**   szProductName$    Product name for registry, e.g., "Approach"
  459. '**   szProductVersion$ Product version for registry, e.g., "2.1"
  460. '**   Returns: TRUE if successful
  461. '** 
  462. '**************************************************************************
  463. PUBLIC SUB AddRegistryLanguage(szProductName$, szProductVersion$)
  464.    DIM szLangKW$, Ret&
  465.    DIM VerMajor%, VerMinor%, dbl#
  466.     DIM szkey$, keyvalue$, s$
  467.  
  468.     IF szProductName$ = "" THEN EXIT SUB
  469.     IF szProductVersion$ = "" THEN EXIT SUB
  470.    szkey$ = gREGLOTUS + szProductName$ + "\" + szProductVersion$ + "\Languages"
  471.    szLangKW$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$)
  472.  
  473. '** Create the key if it doesn't exist or add to existing value
  474.     IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, szkey$) = FALSE THEN
  475.         Ret& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szkey$)
  476.         'if Ret& <> 0 then print "Could not create registry key " szkey$
  477. '** New product/version, create language registry values
  478.         keyvalue$ = "Installed"
  479.         Ret& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, _
  480.             REG_SZ, szLangKW$, lenbp(szLangKW$)+1)
  481.         'if Ret& <> 0 then print "Could not create registry value " szkey$
  482.         keyvalue$ = "Default"
  483.         Ret& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, _
  484.             REG_SZ, szLangKW$, lenbp(szLangKW$)+1)
  485.         'if Ret& <> 0 then print "Could not create registry value " szkey$
  486.     ELSE
  487. '** Add the current language to the "Installed" key in registry if not already
  488. '** there
  489.  
  490.         IF IsLanguageInstalled(szProductName$, szProductVersion$) <> 0 THEN EXIT SUB
  491.  
  492.         s$ = FindRegistryLanguages(szProductName$, szProductVersion$) 
  493.         s$ = s$ + "," + szLangKW$ 
  494.         keyvalue$ = "Installed"
  495.         Ret& = Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, _
  496.             REG_SZ, s$, lenbp(s$)+1)
  497.     END IF
  498.    
  499. END SUB
  500.  
  501.  
  502. '*************************************************************************
  503. '** SUB Lot_SetLanguageSectionsOn (ProdNo%)
  504. '**
  505. '** Purpose:   Sets language sections for copying (off by default)
  506. '** Author:    Jack Donohue
  507. '** Arguments: ProdNo%    Product number 
  508. '** Returns:   
  509. '*************************************************************************
  510. PUBLIC SUB Lot_SetLanguageSectionsOn (ProdNo%) 
  511. DIM rc%, keyword$, chapter$, feature$, sym$, Sib$
  512.  
  513.    Sib$ = Lot_GetNextSibling(Str$(ProdNo%), F_NOTHING )
  514.    chapter$ = Lot_GetFirstChild(Str$(ProdNo%), F_NOTHING )
  515.                
  516. %rem     
  517.     If (chapter$ = "") then
  518.          ERROR STFQUIT
  519.     End if   
  520. %endrem     
  521.          
  522.     WHILE (chapter$ <> Sib$ )
  523.       '** Traverse all chapters, looking for sections with the language
  524.       '** keyword; if they belong to an installed feature, turn them on
  525.  
  526.       keyword$ = Lot_GetChapterValStr (chapter$, F_KEYWORD)
  527.       If IsInstallLanguageSection(keyword$) = TRUE Then
  528.          feature$ = Left(keyword$, Len(keyword$)-6)
  529.          feature$ = Lot_GetChapterFromKeyword (feature$)
  530.          rc% = Lot_GetChapterValInt (feature$, F_INOROUT)   
  531.          If rc% = 1 Then
  532.             rc% = Lot_SetChapterFilesInCopyListInOrOut (chapter$, 1)
  533.          End If
  534.       End If
  535.       '*** Goto next chapter
  536.       chapter$ = Lot_GetNext()  
  537.     WEND
  538. END SUB
  539.  
  540.  
  541. DIM LANGUAGEDIR LIST AS STRING
  542.  
  543. '*************************************************************************
  544. '** PUBLIC FUNCTION Lot_SetLanguageDirectory(szLanguageAcronym$) AS STRING
  545. '** Purpose: Looks up the directory name corresponding to the two letter
  546. '**   language acronym in internal table
  547. '**  
  548. '**  The acronyms are from the ccstr header file; language directory names
  549. '**  other than those commented need to be supplied
  550. '**  
  551. '** Author: JMDonohue
  552. '** Arguments: 
  553. '**   szLanguageAcronym$    Language acronym, e.g., "FR"
  554. '**   Returns: Subdirectory string, e.g., "Francais"
  555. '**************************************************************************
  556. PUBLIC FUNCTION Lot_SetLanguageDirectory(szLanguageAcronym$) AS STRING
  557.    if LanguagesInit  = 0 Then
  558. '**NOTE: Need to complete this sections, and/or resource it    
  559. '?? Catala: 6 characters [Catala]
  560.         LANGUAGEDIR("AM") = "Amharic"
  561.         LANGUAGEDIR("AR") = "Arabi"            'Arabic
  562.         LANGUAGEDIR("AS") = "Assamese"
  563.         LANGUAGEDIR("AY") = "Aymara"
  564.         LANGUAGEDIR("AZ") = "Azerbaijani"
  565.         LANGUAGEDIR("BE") = "Byelorussian"
  566.         LANGUAGEDIR("BG") = "Bulgarian"
  567.         LANGUAGEDIR("BN") = "Bengali"
  568.         LANGUAGEDIR("BO") = "Tibetan"
  569.         LANGUAGEDIR("CA") = "Catalan"
  570.         LANGUAGEDIR("CS") = "Ceska"            'Czech
  571.         LANGUAGEDIR("CY") = "Welsh"
  572.         LANGUAGEDIR("DA") = "Dansk"            'Danish
  573.         LANGUAGEDIR("DE") = "Deutsch"            'German
  574.         LANGUAGEDIR("EL") = "Hellenic"        'Greek
  575.         LANGUAGEDIR("EN") = "English"            'English
  576.         LANGUAGEDIR("EO") = "Esperanto"
  577.         LANGUAGEDIR("ES") = "Espanol"            'Spanish
  578.         LANGUAGEDIR("ET") = "Estonian"
  579.         LANGUAGEDIR("EU") = "Basque"
  580.         LANGUAGEDIR("FA") = "Farsi"            'Farsi
  581.         'LANGUAGEDIR("FA") = "Persian"
  582.         LANGUAGEDIR("FI") = "Suomi"            'Finnish
  583.         LANGUAGEDIR("FO") = "Faeroese"
  584.         LANGUAGEDIR("FR") = "Francais"        'French
  585.         LANGUAGEDIR("GN") = "Guarani"
  586.         LANGUAGEDIR("GU") = "Gujarati"
  587.         LANGUAGEDIR("HI") = "Hindi"
  588.         LANGUAGEDIR("HR") = "Croatian"
  589.         LANGUAGEDIR("HU") = "Magyar"            'Hungarian
  590.         LANGUAGEDIR("HY") = "Armenian"
  591.         LANGUAGEDIR("IN") = "Indonesian"
  592.         LANGUAGEDIR("IS") = "Icelandic"
  593.         LANGUAGEDIR("IT") = "Italian"            'Italian
  594.         LANGUAGEDIR("IW") = "Hebrew"            'Hebrew
  595.         LANGUAGEDIR("JA") = "Japanese"        'Japanese
  596.         LANGUAGEDIR("JI") = "Yiddish"
  597.         LANGUAGEDIR("KA") = "Georgian"
  598.         LANGUAGEDIR("KK") = "Kazakh"
  599.         LANGUAGEDIR("KM") = "Khmer"
  600.         LANGUAGEDIR("KN") = "Kannada"
  601.         LANGUAGEDIR("KO") = "Korean"            'Korean
  602.         LANGUAGEDIR("KS") = "Kashmiri"
  603.         LANGUAGEDIR("KU") = "Kurdish"
  604.         LANGUAGEDIR("KY") = "Kirghiz"
  605.         LANGUAGEDIR("LA") = "Latin"
  606.         LANGUAGEDIR("LO") = "Lao"
  607.         LANGUAGEDIR("LT") = "Lithuanian"
  608.         LANGUAGEDIR("LV") = "Latvian"
  609.         LANGUAGEDIR("LV") = "Lettish"
  610.         LANGUAGEDIR("MG") = "Malagasy"
  611.         LANGUAGEDIR("MK") = "Macedonian"
  612.         LANGUAGEDIR("ML") = "Malayalam"
  613.         LANGUAGEDIR("MN") = "Mongolian"
  614.         LANGUAGEDIR("MO") = "Moldavian"
  615.         LANGUAGEDIR("MR") = "Marathi"
  616.         LANGUAGEDIR("MY") = "Burmese"
  617.         LANGUAGEDIR("NE") = "Nepali"
  618.         LANGUAGEDIR("NL") = "Nederlan"        'Dutch
  619.         LANGUAGEDIR("NO") = "Norsk"            'Norwegian
  620.         LANGUAGEDIR("OR") = "Oriya"
  621.         LANGUAGEDIR("PA") = "Punjabi"
  622.         LANGUAGEDIR("PL") = "Polski"            'Polish
  623.         LANGUAGEDIR("PS") = "Pashto"
  624.         LANGUAGEDIR("PT") = "Portugue"        'Portuguese
  625.         LANGUAGEDIR("QU") = "Quechua"
  626.         LANGUAGEDIR("RM") = "RhaetoRomanic"
  627.         LANGUAGEDIR("RO") = "Romanian"
  628.         LANGUAGEDIR("RU") = "Russkiy"            'Russian
  629.         LANGUAGEDIR("SA") = "Sanskrit"
  630.         LANGUAGEDIR("SD") = "Sindhi"
  631.         LANGUAGEDIR("SH") = "Serbocroatian"
  632.         LANGUAGEDIR("SI") = "Sinhalese"
  633.         LANGUAGEDIR("SK") = "Slovenci"        'Slovak
  634.         LANGUAGEDIR("SL") = "Slovenian"
  635.         LANGUAGEDIR("SO") = "Somali"
  636.         LANGUAGEDIR("SQ") = "Albanian"
  637.         LANGUAGEDIR("SR") = "Serbian"
  638.         LANGUAGEDIR("SV") = "Svenska"            'Swedish
  639.         LANGUAGEDIR("SW") = "Swahili"
  640.         LANGUAGEDIR("TA") = "Tamil"
  641.         LANGUAGEDIR("TE") = "Telugu"
  642.         LANGUAGEDIR("TG") = "Tajiki"
  643.         LANGUAGEDIR("TH") = "Thai"                'Thai
  644.         LANGUAGEDIR("TI") = "Tigrinya"
  645.         LANGUAGEDIR("TK") = "Turkmen"
  646.         LANGUAGEDIR("TL") = "Tagalog"
  647.         LANGUAGEDIR("TR") = "Turkce"            'Turkish
  648.         LANGUAGEDIR("TT") = "Tatar"
  649.         LANGUAGEDIR("UK") = "Ukrainian"
  650.         LANGUAGEDIR("UR") = "Urdu"
  651.         LANGUAGEDIR("UZ") = "Uzbek"
  652.         LANGUAGEDIR("VI") = "Vietnamese"
  653.         LANGUAGEDIR("ZH") = "Chinese"            'Chinese
  654.         LANGUAGEDIR("PB") = "Pseudo"            'Special for pseudo-language testing
  655.    End if
  656.     if szLanguageAcronym$ = "" then
  657.         Lot_SetLanguageDirectory = ""
  658.         exit function
  659.     end if    
  660.     if (ISELEMENT(LANGUAGEDIR(szLanguageAcronym$)) <> 0 ) then
  661.         Lot_SetLanguageDirectory = LANGUAGEDIR(szLanguageAcronym$) 
  662.     Else
  663.         Lot_SetLanguageDirectory = ""
  664.     End if
  665. END FUNCTION 
  666.  
  667.  
  668. CONST    FIXUPSOURCE = 1
  669. CONST FIXUPDEST    = 2
  670. CONST FIXUPBOTH    = 3
  671.  
  672. PUBLIC SUB Lot_FixupLanguageDirectories
  673. '*************************************************************************
  674. '** Purpose: Changes the source filepath to include the language subdirectory
  675. '**   This is only required for node install from a server in a secondary
  676. '**    language, since the content files have been installed in subdirectories
  677. '**    Traverses the list of destination path symbols that have been made by
  678. '**    MarkLanguageSubdir and inserts the language subdirectory as the
  679. '**    last path element in the filename
  680. '**      Required fixup:
  681. '**    Standard    MLC Install    Destination
  682. '**    Server    MLC Install    Destination
  683. '**    Node        MLC Install    Destination
  684. '**    Server    Secondary Server Language    Source
  685. '**  
  686. '**  NOTE: Language install based on FIRST product (or suite)
  687. '**  
  688. '** Author: JMDonohue
  689. '**************************************************************************
  690.     DIM Flag%, network$, ret%
  691.     network$ = GetSymbolValue(SYM_NETWORK$)
  692.     IF network$ = gDISTRIBUTION$ THEN EXIT SUB
  693.  
  694.     Flag% = 0
  695.    IF GetListItem(SYM_INSTALLKINDS$, 1) = gLANGUAGEINSTALL$ THEN _
  696.         Flag% = Flag% + FIXUPDEST
  697.     IF IsServerSecondaryLanguage THEN Flag% = Flag% + FIXUPSOURCE
  698.     FORALL sym IN LanguageDirectorySymbolList 
  699.         ret% = FRefreshLanguageSource(ListTag(sym), sym, Flag)
  700.     END FORALL
  701. END SUB
  702.  
  703. PUBLIC SUB MarkLanguageSubdir(szSubdirSymbol$)
  704. '*************************************************************************
  705. '** Purpose: Adds the symbol to a list of subdirectory symbols that must
  706. '**    have a language subdirectory added to the source and/or destination
  707. '**  
  708. '** Author: JMDonohue
  709. '** Arguments: szSubdirSymbol$    Language dependent destination directory symbol
  710. '**************************************************************************
  711.     DIM s$
  712.     s$ = GetSymbolValue(SYM_LANGUAGE_SUBDIR$) + "\"
  713.     if (ISELEMENT(LanguageDirectorySymbolList(szSubdirSymbol$)) = 0 ) then _
  714.         LanguageDirectorySymbolList(szSubdirSymbol$) = s$ 
  715. END SUB
  716.  
  717.  
  718. PUBLIC FUNCTION IsServerSecondaryLanguage AS INTEGER
  719. '*************************************************************************
  720. '**  FUNCTION IsServerSecondaryLanguage AS INTEGER
  721. '** Purpose: Determines is the current language is a secondary language on
  722. '**    the server, in which case clients must mark language symbols for 
  723. '**    resetting source file locations
  724. '**  
  725. '** Author: JMDonohue
  726. '** Arguments: 
  727. '** Returns:   TRUE if language is server secondary
  728. '**************************************************************************
  729.     DIM s$, installini$, proddir$
  730.  
  731.     IsServerSecondaryLanguage  = FALSE
  732. ' If the install directory is not the same as the base product directo
  733. ' install must be in a language subdirectory
  734.     s$ = GetSymbolValue(SYM_STF_CWDDIR$)
  735.     installini$ = s$ + gINSTALLINI$
  736.     s$ = GetIniKeyString(installini$, "Critical Directories", "INSTDIR")
  737.     proddir$ = GetIniKeyString(installini$, "Critical Directories",_
  738.         Reg_GetProductAcronym(1) + "DIR")
  739.     IF s$ <> proddir$ THEN IsServerSecondaryLanguage  = TRUE
  740.  
  741. END FUNCTION
  742.  
  743. FUNCTION FindRegistryLanguages(szProductName$, szProductVersion$) AS STRING
  744. '*************************************************************************
  745. '** Purpose: Find out what languages have been installed for the product
  746. '**  
  747. '** Author: JMDonohue
  748. '** Arguments: szProductName$        Product name in registry
  749. '**                szProductVersion$    Product version in registry
  750. '** 
  751. '** Returns:   List of installed languages
  752. '**************************************************************************
  753.    DIM szkey$, ret&, nsize&, gbuf$ 
  754.     FindRegistryLanguages = ""
  755.    szkey$ = gREGLOTUS + szProductName$ + "\" + szProductVersion$ + "\Languages"
  756.     IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, szkey$) = FALSE THEN EXIT FUNCTION
  757.     gbuf$=CreateBuffer(256)
  758.     nsize& = Len(gbuf$)
  759.     ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, "Installed", 0, gbuf$, nsize&) 
  760.     FindRegistryLanguages = NullTrim(gbuf$)
  761.     gbuf$=""
  762.  
  763. END FUNCTION
  764.